package com.qf2.factory;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.beans.factory.FactoryBean;

import java.io.InputStream;

/**
 * 偷天换日，狸猫换太子
 *
 * spring中BeanFactory和FactoryBean什么区别？
 *    BeanFactory 是整个spring体系中，bean工厂的顶层接口。规范了获取bean的常规方法
 *    FactoryBean 是一种特殊的Bean对象，当我们在获取这种bean时，返回的不是这个bean本身，而是他内部的getObject方法返回的对象
 *          后期这个特殊的bean对象主要在框架整合时使用。可以利用他来创建一些复杂的对象
 *
 */
public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory> {
    @Override
    public SqlSessionFactory getObject() throws Exception {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis.xml");

            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);


            return factory;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 表示这个FactoryBean是用来返回SqlSessionFactory类型的对象
     * @return
     */
    @Override
    public Class<?> getObjectType() {
        return SqlSessionFactory.class;
    }
}
